小编典典

在 Heroku 上创建 Node.js 应用程序时,我应该将文件夹“node_modules”签入 Git 吗?

all

我在这里遵循了 Heroku 上 Node.js 的基本 入门 说明:

https://devcenter.heroku.com/categories/nodejs

这些指令没有告诉您创建 .gitignore node_modules,因此暗示应该将文件夹 node_modules 签入到 Git。当我在 Git
存储库中包含 node_modules 时,我的入门应用程序运行正常。

当我在以下位置遵循更高级的示例时:

它指示我将文件夹 node_modules 添加到文件 .gitignore 。所以我从 Git 中删除 了 node_modules
文件夹,将其添加到文件 .gitignore 中,然后重新部署。这次部署失败,如下所示:

-----> Heroku receiving push
-----> Node.js app detected
-----> Resolving engine versions
       Using Node.js version: 0.8.2
       Using npm version: 1.0.106
-----> Fetching Node.js binaries
-----> Vendoring node into slug
-----> Installing dependencies with npm
       Error: npm doesn't work with node v0.8.2
       Required: node@0.4 || 0.5 || 0.6
           at /tmp/node-npm-5iGk/bin/npm-cli.js:57:23
           at Object.<anonymous> (/tmp/node-npm-5iGk/bin/npm-cli.js:77:3)
           at Module._compile (module.js:449:26)
           at Object.Module._extensions..js (module.js:467:10)
           at Module.load (module.js:356:32)
           at Function.Module._load (module.js:312:12)
           at Module.require (module.js:362:17)
           at require (module.js:378:17)
           at Object.<anonymous> (/tmp/node-npm-5iGk/cli.js:2:1)
           at Module._compile (module.js:449:26)
       Error: npm doesn't work with node v0.8.2
       Required: node@0.4 || 0.5 || 0.6
           at /tmp/node-npm-5iGk/bin/npm-cli.js:57:23
           at Object.<anonymous> (/tmp/node-npm-5iGk/bin/npm-cli.js:77:3)
           at Module._compile (module.js:449:26)
           at Object.Module._extensions..js (module.js:467:10)
           at Module.load (module.js:356:32)
           at Function.Module._load (module.js:312:12)
           at Module.require (module.js:362:17)
           at require (module.js:378:17)
           at Object.<anonymous> (/tmp/node-npm-5iGk/cli.js:2:1)
           at Module._compile (module.js:449:26)
       Dependencies installed
-----> Discovering process types
       Procfile declares types -> mongod, redis, web
-----> Compiled slug size is 5.0MB
-----> Launching... done, v9

运行“heroku ps”确认崩溃。好的,没问题,所以我回滚了更改,将文件夹 node_module 添加回 Git 存储库并将其从文件
.gitignore 中删除。但是,即使在还原后,我仍然在部署时收到相同的错误消息,但现在应用程序再次正常运行。运行“heroku
ps”告诉我应用程序正在运行。

这样做的正确方法是什么?是否包含文件夹 node_modules ?为什么回滚时仍然会收到错误消息?我的猜测是 Git 存储库在 Heroku
方面的状态不佳。


阅读 245

收藏
2022-03-23

共1个答案

小编典典

第二次更新

常见问题解答不再可用。

从以下文档shrinkwrap

如果您希望锁定包中包含的特定字节,例如对能够重现部署或构建有 100%
的信心,那么您应该将您的依赖项检查到源代码控制中,或者采用其他一些可以验证的机制内容而不是版本。

香农和史蒂文之前提到过这一点,但我认为这应该是公认答案的一部分。


更新

以下建议列出的来源已更新。他们不再建议提交该node_modules文件夹。

通常,没有。允许 npm 为您的包解析依赖项。

对于您部署的包,例如网站和应用程序,您应该使用 npm shrinkwrap 锁定您的完整依赖关系树:

https://docs.npmjs.com/cli/shrinkwrap


原帖

作为参考,npm FAQ 清楚地回答了您的问题:

将 node_modules 检入 git 以获取您部署的内容,例如网站和应用程序。不要将 node_modules 签入 git
以获取打算重用的库和模块。使用 npm 管理开发环境中的依赖项,而不是部署脚本中的依赖项。

并为此提供一些很好的理由,请阅读Mikeal Rogers
的帖子


来源:https ://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-
into-git

2022-03-23